package com.yunke.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.yunke.entity.YunkeFile;
import org.springframework.web.multipart.MultipartFile;

import java.util.List;

/**
 * 文件管理服务接口
 * 
 * @author yunke
 * @since 1.0.0
 */
public interface YunkeFileService extends IService<YunkeFile> {

    /**
     * 上传文件
     */
    YunkeFile uploadFile(MultipartFile file, String fileCategory,
                        String businessType, Long businessId);

    /**
     * 批量上传文件
     */
    List<YunkeFile> uploadFiles(MultipartFile[] files, String fileCategory,
                               String businessType, Long businessId);

    /**
     * 删除文件
     */
    boolean deleteFile(Long id, Long userId);

    /**
     * 批量删除文件
     */
    boolean deleteFiles(List<Long> ids, Long userId);

    /**
     * 分页查询文件列表
     */
    IPage<YunkeFile> getFilePage(Integer current, Integer size,
                                Integer fileType, String fileCategory,
                                String businessType, Long uploadUserId);

    /**
     * 根据ID查询文件详情
     */
    YunkeFile getFileById(Long id);

    /**
     * 根据业务查询文件列表
     */
    List<YunkeFile> getFilesByBusiness(String businessType, Long businessId);

    /**
     * 根据用户查询文件列表
     */
    List<YunkeFile> getFilesByUser(Long userId, Integer fileType, String fileCategory);

    /**
     * 获取下载链接
     */
    String getDownloadUrl(Long id, Long userId);

    /**
     * 增加下载次数
     */
    boolean increaseDownloadCount(Long id);

    /**
     * 增加访问次数
     */
    boolean increaseAccessCount(Long id);

    /**
     * 清理临时文件
     */
    boolean cleanTempFiles();

    /**
     * 清理过期文件
     */
    boolean cleanExpiredFiles();

    /**
     * 检查文件权限
     */
    boolean checkFilePermission(Long fileId, Long userId);

    /**
     * 生成缩略图
     */
    boolean generateThumbnail(Long fileId);

    /**
     * 统计文件大小
     */
    long getTotalSize(Long userId, Integer fileType, String fileCategory);

    /**
     * 统计文件数量
     */
    long countFiles(Long userId, Integer fileType, String fileCategory);

    /**
     * 查询所有分类
     */
    List<String> getAllCategories();

    /**
     * 移动文件分类
     */
    boolean moveCategory(Long id, String newCategory, Long userId);
} 